package com.itfenghuang.day11;

import java.io.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class 多线程基础复习 {
    public static void main(String[] args) throws ExecutionException, InterruptedException, IOException, ClassNotFoundException {
        /**
         *
         *  多线程三种方式区别
         *      实现 Runnable , Collable 接口
         *       扩展性强,在实现接口的同时还可以继承其他类
         *       编程相对复杂,不能直接使用 Thread 类中的方法
         *
         *      继承 Thread 类
         *      扩展性差,不能继承其他类
         *      编程简单,可以直接使用 Thread 类中的方法
         *
         */
        //实现多线程的方式之一
        A a = new A();
        a.start();

        //实现多线程的方式之二
//        B b = new B();
        // 创建thread对象,将自定义对象通过构造方法传进来
//        Thread thread = new Thread(b);
//        thread.start();

        //实现多线程的方式之三
        C c = new C();
        //创建future的实现类futureTask对象,将自定义对象通过构造方法传进来
        FutureTask<Object> task = new FutureTask<>(c);
        // 创建thread对象, 将futureTask对象通过构造方法传递过去
        Thread thread1 = new Thread(task);
        thread1.start();
        //使用futuretask对象获取线程的返回值
        System.out.println(task.get());



        //序列化写出对象
//        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\it\\a.txt"));
//        Duixiang dx = new Duixiang("爆爆","11");
//        oos.writeObject(dx);
//        oos.close();

        //反序列化读入对象
        //修改了对象所属的类,在进行反序列化操作
//        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\it\\a.txt"));
//        System.out.println(ois.readObject());
//        ois.close();
    }
}
class A extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("继承Thread类"+i);
        }
    }
}
class B implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("runnable"+i);
        }
    }
}
class C implements Callable<Object> {

    @Override
    public Object call() throws Exception {
        for (int i = 0; i < 10; i++) {
            System.out.println("三水---------"+i);
        }
        return "天真";
    }
}


class Duixiang implements Serializable {
    private transient String name;// 关键字 transient 不想序列化
    private String sex;
    private int age;
    private static final long serialVersionUID=1L;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Duixiang() {
    }

    public Duixiang(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Duixiang{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}